Nastaveni predem nezname Property
Otázka od: Karel Pecinka
16. 11. 2004 16:45
Zdravim kolegy,
potreboval bych mit moznost nastavit neznamou property u komponenty, u
ktere neznam dopredu typ. Jinymi slovy potrebuju mit moznost v
konfiguracnim souboru zadat napr.: OK_Button.Caption=&OK nebo
OK_Button.Visible=false
Jak mam postupovat? Jedna z komponent RX nejak umi zjistit vsechny
properties na komponente, takze predpokladam, ze to nejak musi jit.
Diky za namety.
Karel
Odpovedá: dam
16. 11. 2004 16:59
Prostuduj si unit typinfo, ale je to docela pruda. Napovedet by Ti mohla i
ta RX knihovna.
David
===================================
Programovani, skoleni .NET, C++, Internet, Delphi
mailto:arthur@lerach.cz
mailto:arthur@argh.cz
http://www.argh.cz
ICQ: 345377828; msn: arthur@argh.cz
===================================
> -----Original Message-----
> From: delphi-l-owner@clexpert.cz
> [mailto:delphi-l-owner@clexpert.cz] On Behalf Of Karel Pecinka
> Sent: Tuesday, November 16, 2004 4:45 PM
> To: delphi-l@clexpert.cz
> Subject: Nastaveni predem nezname Property
>
> Zdravim kolegy,
>
> potreboval bych mit moznost nastavit neznamou property u komponenty, u
> ktere neznam dopredu typ. Jinymi slovy potrebuju mit moznost v
> konfiguracnim souboru zadat napr.: OK_Button.Caption=&OK nebo
> OK_Button.Visible=false
>
> Jak mam postupovat? Jedna z komponent RX nejak umi zjistit vsechny
> properties na komponente, takze predpokladam, ze to nejak musi jit.
>
> Diky za namety.
>
> Karel
>
>
>
Odpovedá: Karel Kral
16. 11. 2004 17:29
Pomoci RTTI, napr takto:
PropInfo := GetPropInfo(Component.ClassInfo, 'DataSource');
if PropInfo <> nil then
begin
ObjProp := GetObjectProp(Component, 'DataSource');
if ObjProp is TDataSource then
begin
SetObjectProp(Component, 'DataSource', DataSource);
Result := true;
Exit;
end;
end;
Karel Pecinka napsal(a):
> Zdravim kolegy,
>
> potreboval bych mit moznost nastavit neznamou property u komponenty, u
> ktere neznam dopredu typ. Jinymi slovy potrebuju mit moznost v
> konfiguracnim souboru zadat napr.: OK_Button.Caption=&OK nebo
> OK_Button.Visible=false
>
> Jak mam postupovat? Jedna z komponent RX nejak umi zjistit vsechny
> properties na komponente, takze predpokladam, ze to nejak musi jit.
>
> Diky za namety.
>
> Karel
>
>
>
>
>
--
______________________________________________________
Karel Kral, vedouci odd. IT / IT manager
Purus, s.r.o., Cezavy 627, 664 56 Blucina, CZ
Tel: 547 235 000, 602 552 432, Fax: 547 231 203
E-Mail: mailto:kral@purus.cz, WWW: http://www.purus.cz
______________________________________________________
Odpovedá: Karel Pecinka
17. 11. 2004 1:36
Nakonec to nebylo zase tak nejhorsi. Zde je reseni, myslim ze se to
mnohym bude hodit. Do uses si pridejte TypInfo a prip. SynaUtil.
procedure SetProperty(AComponent: TComponent; CP: string; Value:
Variant);
var
Component: TComponent;
CompName, PropName: string;
begin
CompName := SeparateLeft(CP, '.');
PropName := SeparateRight(CP, '.');
Component := AComponent.FindComponent(CompName);
if Component <> nil then
begin
SetPropValue(Component, PropName, Value);
end;
end;
function GetProperty(AComponent: TComponent; CP: string; PreferStrings:
Boolean): Variant;
var
Component: TComponent;
CompName, PropName: string;
begin
CompName := SeparateLeft(CP, '.');
PropName := SeparateRight(CP, '.');
Component := AComponent.FindComponent(CompName);
if Component <> nil then
begin
Result := string(GetPropValue(Component, PropName, PreferStrings));
end;
end;
Pouziti:
SetProperty(MainForm, 'Button1.Caption', 'Ahoj');
SetProperty(MainForm, 'Button1.Visible', false) nebo
SetProperty(MainForm, 'Button1.Visible', 'false');
Parada co?
Karel
> Prostuduj si unit typinfo, ale je to docela pruda. Napovedet
> by Ti mohla i ta RX knihovna. David